package ucc.request;

import java.math.BigInteger;
import java.util.ArrayList;

import ucc.objects.CaisseDuJourDTO;
import ucc.objects.ClasseDeProduitDTO;
import ucc.objects.CompteUtilisateurDTO;
import ucc.objects.ContenanceDTO;
import ucc.objects.FonctionDTO;
import ucc.objects.OperationCaisseDTO;
import ucc.objects.ProduitDTO;
import ucc.objects.ResumeCaisseDTO;
import ucc.objects.TypeDeProduitDTO;
import configur.PluginFactory;

public interface UccViewer {
	UccViewer INSTANCE = (UccViewer) PluginFactory.INSTANCE
			.getPluginFor(ucc.request.UccViewer.class);

	CompteUtilisateurDTO leCompteUtilisateurDe(String nomDUtilisateur);

	ArrayList<CompteUtilisateurDTO> lesComptesUtilisateurs();

	FonctionDTO laFonctionNum(int id);

	ArrayList<FonctionDTO> lesFonctions();

	TypeDeProduitDTO leTypeDeProduitNum(int id);

	ArrayList<TypeDeProduitDTO> lesTypesDeProduits();

	ClasseDeProduitDTO laClasseDeProduitNum(int id);

	ArrayList<ClasseDeProduitDTO> lesClassesDeProduits();

	ContenanceDTO laContenanceNum(int id);

	ArrayList<ContenanceDTO> lesContenances();

	ProduitDTO leProduitNum(int id);

	ArrayList<ProduitDTO> lesProduits();

	ArrayList<ProduitDTO> lesProduits(boolean actif);

	ArrayList<ProduitDTO> lesProduitsDeLaClasse(
			ClasseDeProduitDTO classeDeProduit, boolean actif);

	OperationCaisseDTO lOperationDeCaisseNum(Long id);

	ArrayList<OperationCaisseDTO> lesOperationsDeLaCaisse(
			CaisseDuJourDTO caisseDuJour);

	ArrayList<OperationCaisseDTO> lesOperationsDeLaCaisse(int id);

	CaisseDuJourDTO laCaisseDuJourCompleteNum(int id);

	CaisseDuJourDTO laCaisseOuvertePour(CompteUtilisateurDTO utilisateur);

	ArrayList<ResumeCaisseDTO> leResumeDeCaissePour(CaisseDuJourDTO caisse);

	ResumeCaisseDTO leResumeDeCaissePour(CaisseDuJourDTO caisse,
			ProduitDTO produit, boolean venteAnimateur);

	double leFondDeCaisseLogique(CaisseDuJourDTO caisseDuJour);

	ArrayList<ProduitDTO> lesProduitsVendusTrie(CaisseDuJourDTO caisseDuJour,
			ClasseDeProduitDTO classe, boolean venteAnimateur);
	
	int quantiteVenduPourCaisseDuJourEtProduit(CaisseDuJourDTO caisseDuJour,
			ProduitDTO produit, boolean venteAnimateur);
}
